﻿using System;
using System.Collections;
using System.ComponentModel;
using System.Web;
using System.Web.SessionState;
using System.Timers;
using System.IO;
using System.Data;
using System.Data.SqlClient;

using Shove.Database;

public class Global : System.Web.HttpApplication
{
    //private Task task;

    /// <summary>
    /// 必需的设计器变量。
    /// </summary>
    private System.ComponentModel.IContainer components = null;

    public Global()
    {
        InitializeComponent();
    }

    protected void Application_Start(Object sender, EventArgs e)
    {
        //#region 下载支付宝派款结果自动任务

        //task = new Task();
        //task.Run();

        //#endregion
    }

    protected void Session_Start(Object sender, EventArgs e)
    {

    }

    protected void Application_BeginRequest(Object sender, EventArgs e)
    {
        HttpContext context = HttpContext.Current;

        string Url = context.Request.Url.AbsolutePath;
        string DomainName = Shove._Web.Utility.GetUrl();

        if (!Url.Contains(DomainName + "/default.aspx"))
        {
            return;
        }

        Site site = new Site()[Shove._Web.Utility.GetUrlWithoutHttp()];

        if (site == null)
        {
            return;
        }

        Customer customer = Customer.GetSessionCustomer(site.ID);

        bool IsAllowDesign = false;

        if (customer.ID == 1)
        {
            IsAllowDesign = true;
        }

        if (!IsAllowDesign)     //浏览模式
        {
            string PageName = Shove._Web.Utility.GetRequest("PN");

            if (String.IsNullOrEmpty(PageName))
            {
                PageName = "Default";
            }

            string CachePageName = "~/Private/" + site.ID.ToString() + "/PageCaches/" + PageName + ".aspx";
            context.RewritePath(CachePageName);
        }
    }

    protected void Application_EndRequest(Object sender, EventArgs e)
    {

    }

    protected void Application_AuthenticateRequest(Object sender, EventArgs e)
    {

    }

    protected void Application_Error(Object sender, EventArgs e)
    {
        //Exception objErr = Server.GetLastError().GetBaseException();

        //string ErrorMsg = "Error, PageName: " + Request.Url.ToString() + "。 ErrorMsg: " + objErr.Message + " Source:" + objErr.Source + "。";
        //WriteIni(ErrorMsg, "Exception");

        ////Server.ClearError();
        //Response.Redirect("~/Error.aspx", true);
    }

    protected void WriteIni(string Text)
    {
        WriteIni(Text, "Log");
    }

    protected void WriteIni(string Text, string Section)
    {
        try
        {
            Shove._IO.IniFile ini = new Shove._IO.IniFile(System.AppDomain.CurrentDomain.BaseDirectory + "SystemLog.ini");
            ini.Write(Section, System.DateTime.Now.ToString(), Text);
        }
        catch { }
    }

    protected void Session_End(Object sender, EventArgs e)
    {

    }

    protected void Application_End(Object sender, EventArgs e)
    {
        //if (task != null)
        //{
        //    task.Exit();
        //}
    }

    public override string GetVaryByCustomString(HttpContext context, string custom)
    {
        if (custom == "SitePage")
        {
            // 获取当前站点
            string SiteUrl = Shove._Web.Utility.GetUrlWithoutHttp(context);
            Site _Site = new Site()[SiteUrl];

            if (_Site == null)
            {
                return "[" + System.DateTime.Now.Ticks.ToString() + "]" + SiteUrl;
            }

            // 获取当前站点的 xml 文件最后编辑时间
            string XmlFileName = this.Server.MapPath("~/ShoveWebUI_client/Data/ShoveWebPart.Layer/" + _Site.ID.ToString() + ".xml");

            if (!System.IO.File.Exists(XmlFileName))
            {
                System.IO.File.Copy(this.Server.MapPath("~/ShoveWebUI_client/Data/ShoveWebPart.Layer/0.xml"), XmlFileName);
            }

            DateTime LastWriteTime = DateTime.Now;

            try
            {
                FileInfo file = new FileInfo(XmlFileName);
                LastWriteTime = file.LastWriteTime;
            }
            catch { }

            // 获取当前SD登陆用户
            long UserID = -1;

            try
            {
                UserID = (long)Application["ShoveWebPart.CacheType.UserID." + context.Request.Cookies["ASP.NET_SessionId"].Value];
            }
            catch { }

            // 获取当前站点登陆用户
            long SiteUserID = -1;

            try
            {
                SiteUserID = (long)Application["ShoveWebPart.CacheType.SiteUserID." + context.Request.Cookies["ASP.NET_SessionId"].Value];
            }
            catch { }

            return "[" + UserID.ToString() + "][" + SiteUserID.ToString() + "][" + LastWriteTime.ToString() + "]" + SiteUrl;
        }
        else if (custom == "AdminPage")   //后台管理页面
        {
            // 获取当前用户 ID
            long CustomerID = -1;

            try
            {
                CustomerID = (long)Application["ShoveWebPart.CacheType.SiteUserID." + context.Request.Cookies["ASP.NET_SessionId"].Value];
            }
            catch { }

            return "[" + CustomerID.ToString() + "]";
        }
        
        return base.GetVaryByCustomString(context, custom);
    }

    #region Web 窗体设计器生成的代码
    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
        this.components = new System.ComponentModel.Container();
    }
    #endregion
}
